iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0

昨天我們介紹了 Jenkins 的基本知識,今天我們就來開始搭建 Jenkins:

Jenkins 安裝

昨天有提到,Jnekins 能夠以 war 和 Container 的方式搭建,為了讓讀者較好理解 Jenkins workspace 的關係,測試就使用二近制的方式下載 Jenkins 並安裝在 DevOps 機上面。

Jenkins 的執行需要仰賴 JDK,而後續我們的後端的打包也需要 Maven 的安裝:

#更新 apt
sudo apt update -y
#安裝 java 11
sudo apt install openjdk-11-jdk -y
#安裝 maven 
sudo apt update
sudo apt install maven
mvn -version

接著安裝 Jenkins

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins -y

一般來說,由 Apache tomcat 所開發的項目預設會使用 8080 port,這裡我們就將它改為 9002 port

#前往配置檔案資料夾
/usr/lib/systemd/system
#修改 port 
sudo vim jenkins.service
# Port to listen on for HTTP requests. Set to -1 to disable.
# To be able to listen on privileged ports (port numbers less than 1024),
# add the CAP_NET_BIND_SERVICE capability to the AmbientCapabilities
# directive below.
Environment="JENKINS_PORT=9002"

完成後,要開放 9002 port,並且重啟 systmctl。

sudo sudo ufw allow 9002
sudo systemctl daemon-reload
sudo service jenkins restart

完成後,即可在 192.168.1.120:9002 訪問 Jenkins,首次訪問的時候,需要輸入 initialAdminPassword,只需在 DevOps 機用 cat 指令印出後複製即可。

https://ithelp.ithome.com.tw/upload/images/20221007/20132878L665BnNkU6.png

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

進入後可以選擇左側的推薦安裝 pligin,等待完成後首次創建 admin 帳戶,就能夠進入 Jenkins 主頁面了!

第一個 Plugin - Role-based Authorization Strategy

當我們建構好了 Jenkins 服務,當然不會一直使用 admin 帳號去完成所有的事情,因此,我們需要在 Jenkins 內創建一個使用者帳號

點選側欄的 管理 Jenkins => Security 下的管理使用者 => 側欄的+ 建立使用者

完成後,系統會預設能夠登入的用戶享有所有的權限,因此我們需要下載能夠管理使用者與權限的 Plugin,Role-based Authorization Strategy

在創建 Harbor 的時候有提到 RBAC,能夠設定角色權限,並指派給成員

我們到 管理 Jenkins => 外掛總管 中輸入 Role-based Authorization Strategy,並點選安裝後不啟動。

https://ithelp.ithome.com.tw/upload/images/20221007/20132878vVcgx442p6.png

接著我們到 管理 Jenkins => 設定全域安全性 => 授權 下選取 Role-based Strategy 並儲存,即可以在 管理 JenkinsSecurity 下看到 Manage and Assign Roles

https://ithelp.ithome.com.tw/upload/images/20221007/20132878lycGFpP2Rm.png

進入後選擇 Manage Roles,在 Role to add 內新增一個 Developer 角色並按下 add,此時就可以對 Developer 這個角色給予再 Jenkins 上的權限,這裡我先將 Developer 也設定為 Administer,具體的角色權限可以依照需求設定。

https://ithelp.ithome.com.tw/upload/images/20221007/20132878T5MEaujtgo.png

完成後,我們可以點選 Assign Roles 將剛剛創建的 user 加入 Developer 角色中。之後,我們都可以使用剛才創建的成員帳號來進行操作。

Pipeline 介紹

昨天我們有簡單的介紹了 Pipeline 的定義與內容,那麼今天,我們先製作一個簡單的 Pipeline 作業,並說明其運作的原理。

我們先改換成非 admin 的帳號進入,並點選側欄的 + 新增作業,這裡我們選擇建立 Pipeline 作業。

https://ithelp.ithome.com.tw/upload/images/20221007/20132878Shx2hhGODY.png

在 Jenkins 2.0 起正式推展 Pipeline,昨天說 Pipeline 是程式碼到部署會經過的每個步驟的集合,也因此,Jenkins 能夠以程式碼腳本的形式,將 Pipeline 的流程寫在檔案內,而這個檔案固定被叫做 Jenkinsfile

既然是文字檔,也就能夠受到 Git 的版本管理,能夠讓我們在每個版本中逐次的更新並留下紀錄,以上的模式則被稱為** Pipeline as Code**。所以昨天除了前後端以外,我也另外創建了一個放置 Jenkinsfile 的 Repository,名為 cct-devops。

Jenkinsfile 具有聲明式 (Declarative)腳本式 (Scripted) 兩種寫法,目前主流是使用聲明式撰寫。

https://ithelp.ithome.com.tw/upload/images/20221007/20132878t6CMg33Ete.png

完成創建後,我們預設會進入 color-code-tag 這個項目的配置內,在下方的 Pipleine 選項,提供了 Pipeline scriptPipeline script SCM (Source Code Management) 兩個選擇,第一個能讓我們直接將 Jenkinsfile 內容撰寫在上面並執行,第二個則會登入到 Gitlab Repository 內獲取 Jenkinsfile 的內容來執行。

一般而言,在初期建立與測試的時候會先選用第一種,等後面成熟後再改為第二種。這裡我們就直接在 Script 的 Textarea 下輸入腳本:

pipeline {

	agent any
	
	stages {
		stage('Check JavaCode From Gitlab') {
			steps {
				echo '拉取原始碼'		
			}
		}

		stage('編譯成 Jar 檔') {
			steps {
					echo '測試編譯與打包'
			}
		}
        
        stage('打包成 Image') {
			steps {
					echo '打包 Image'
			}
		} 
	}
}

我們一起來解釋一下 Jenkins & Jenkinsfile 的術語內容:

  • Job / Project: 由 Jenkins 控制/監控的可運行任務
  • Agent / Node: Jenkins 環境中可用來執行 pipeline 的機器 (machine or container)
  • Stage: Pipeline 中的子集,用來表述執行的階段,如 Build, Test, Deploy 等
  • Step: Stage 中的單一任務,用於告知 Jenkins 要執行什麼
  • Build: 一個 job/Project 所執行的結果

輸入完後後我們點選儲存,便會來到 color-code-tag 項目的主頁面,這裡直接點選左側的 馬上建置,則會看到左下角的綠圈開始跑,也代表我們的 Pipeline 腳本開始執行了,完成後,會看到剛才執行的 Stage View,也就是執行的結果。

另外我印象中首次構建必須手動觸發一次,之後才能觸發自動構建。

https://ithelp.ithome.com.tw/upload/images/20221007/20132878Jz8EqHhQnr.png

另外我們也能點選左下角的綠圈進入那一個 Build 查看 Console 的輸出:

https://ithelp.ithome.com.tw/upload/images/20221007/20132878G6poM5sK5Y.png

能夠看到,我們在每個 steps 內下了 echo 輸出指令,這時我們也能夠在 steps 內下 sh 指令:

        stage('打包成 Image') {
			steps {
					echo '打包 Image'
                    sh 'java -version'
                    sh 'mvn -v'
			}
		} 

更改後再建置一次 Build,就可以在 console 內看到 java 和 maven 的版本被成功輸出了。

今日結語

Jenkins 利用 Jenkinsfile 撰寫 Pipeline,並執行內部定義的步驟
Jenkins Plugin 提供大量的功能(也有使用風險)

今天,我們一起搭建了 Jenkins 的服務,並且建立的一個使用者及配置權限,最後完成了 color-code-tag 第一個 pipeline 的執行;明天,我們開始實踐 Pipeline 內的每一個步驟,讓這些流程走向自動化。

終於熬到雙十連假了,祝大家周末愉快,然後文章也可以加減看~


上一篇
Day21: Jenkins 介紹
下一篇
Day23: Jenkins Pipeline 構建,Gitlab & Harbor 串接
系列文
一個人也能 DevOps ? 用 Angular + Spring Boot 演示專案由開發到部署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言